package com.starview.star.compiler.canonical;

/**
 * The IRule interface is a marker for rule-like objects
 * 
 * @author fgm
 * 
 * @param <T>
 *          encodes the kind of rule it is
 */
public interface IRule<T> extends Canonical
{

  /**
   * The argument patterns associated with the rule.
   * 
   * @return the argument patterns
   */
  IContentPattern[] getArgs();

  /**
   * Version specific entity that returns the right-hand side expression or action or whatever.
   * 
   * @return the replacement body of the rule
   */
  T getBody();
}
